/*
 * ScheduledDay.java
 * 
 * Copyright (c) 2008, Marshall Scorcio, Ralph Holzmann, 
 * Stewart Sweet, Tyler Hoersch, Jeffery Van Handel
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * * Redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer.
 * * Redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution.
 * * Neither the name of the University of Wisconsin Oshkosh nor the
 * names of its contributors may be used to endorse or promote products
 * derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS AND CONTRIBUTORS ''AS IS'' AND 
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 * 
 */

import java.util.Vector;

public class ScheduledDay implements java.io.Serializable
{
    private Vector<Shift> shifts;
    
    private int dayOfMonth;
    private int month;
    private int year;  
    private int dayOfWeek;
    
    public ScheduledDay(int dayOfWeek, int dayOfMonth, int month, int year)
    {
        this.dayOfMonth = dayOfMonth;
        this.month = month;
        this.year = year;
        this.dayOfWeek = dayOfWeek;
        
        shifts = new Vector<Shift>();
    }
    
    public ScheduledDay(String scheduledDay)
    {        
        dayOfWeek = Day.getDayOfWeekFromName(scheduledDay.substring(0, scheduledDay.indexOf(",")));
        scheduledDay = scheduledDay.substring(scheduledDay.indexOf(",") + 2);
        
        month = Day.getMonthFromName(scheduledDay.substring(0, scheduledDay.indexOf(" ")));
        scheduledDay = scheduledDay.substring(scheduledDay.indexOf(" ") + 1);
        
        dayOfMonth = Integer.parseInt(scheduledDay.substring(0, scheduledDay.indexOf(", ")));
        scheduledDay = scheduledDay.substring(scheduledDay.indexOf(",") + 2);
                
        year = Integer.parseInt(scheduledDay);
        
        shifts = new Vector<Shift>();
    }
    
    public Shift findShiftByTime(TimeBlock block)
    {        
        Shift shift = null;
        
        for (int i = 0; i < shifts.size(); i++)
        {
            if (shifts.elementAt(i).equals(block))
            {
               shift = shifts.elementAt(i);
            }
        }
        
        return shift;
    }
    
    public void removeShift(Shift shift)
    {
        if(shifts.contains(shift))
        {
            shifts.remove(shift);
        }
    }
    
    public void removeAllShifts()
    {
        shifts.clear();
    }
    
    public void addShift(Shift shift)
    {
        shifts.add(shift);
    }
    
    public Shift getShiftAt(int index)
    {
        return shifts.elementAt(index);
    }
    
    public int getNumberOfShifts()
    {
        return shifts.size();
    }
    
    public Vector<String> getSchedule()
    {
        Vector<String> schedule = new Vector<String>();
        
        for (int i = 0; i < getNumberOfShifts(); i++)
        {
            for (int j = 0; j < getShiftAt(i).getNumberOfEmployees(); j++)
            {
                schedule.add(getShiftAt(i).getEmployeeAt(j).getName() + " " + getShiftAt(i).timeToString());
            }
        }
        return schedule;
    }
    
    @Override
    public String toString()
    {
        return Day.getNameFromDayOfWeek(dayOfWeek) + ", " + Day.getNameFromMonth(month) + " " + dayOfMonth + ", " + year;
    }
    
    public int getDayOfMonth()
    {
        return dayOfMonth;
    }
    
    public int getDayOfWeek()
    {
        return dayOfWeek;
    }
    
    public int getMonth()
    {
        return month;
    }
    
    public int getYear()
    {
        return year;
    }
}
